/**
 * 权限控制（登录状态、用户信息）
 * 登录、退出、检测是否登录、检测账号状态(是否被拉黑)等
 */
/**
 * storage key
 */
const UID_KEY = "UID";
const TOKEN_KEY = "TOKEN";

var TOKEN = null;
var USERINFO = null;

/**
 * 设置用户id
 */
function setToken(token) {
  TOKEN = token;
}

/**
 * 获取用户token
 * @return integer|null
 */
export function getToken() {
  return TOKEN;
}

/**
 * 设置用户id
 */
function setUserInfo(userInfo) {
  USERINFO = userInfo;
}

export function getUID() {
  return USERINFO == null ? null : USERINFO.userId;
}

export function getUserType() {
  return USERINFO == null ? null : USERINFO.type;
}

export function isCustomer() {
  return getUserType() === "customer";
}

export function isPE() {
  return getUserType() === "pe";
}
/**
 * 自动登录
 */
export function autoLogin() {
  //todo 获取用户信息填充USERINFO
  // UID = uni.getStorageSync(UID_KEY);
  // TOKEN = uni.getStorageSync(TOKEN_KEY);
}

/**
 * 设置登录态，保存用户token与用户信息
 */
export function markLogin(token, userInfo) {
  try {
    uni.setStorageSync(TOKEN_KEY, token);
    uni.setStorageSync(UID_KEY, userInfo.userId);

    setToken(token);
    setUserInfo(userInfo);
    // getApp().globalData.setUserInfo(userInfo);
    return Promise.resolve();
  } catch (e) {
    console.log("CatchClause", e);
    console.error("写入storage失败: " + e);
    Promise.reject({ message: "设置storage失败: " + e });
  }
}

/**
 * 登出
 */
export function logout() {
  try {
    uni.clearStorageSync();
    setToken(null);
    setUserInfo(null);
    // getApp().globalData.setUserInfo(null);
    return true;
  } catch (e) {
    console.log("CatchClause", e);
    console.error("清空storage失败: " + e);
    return false;
  }
}

/**
 * 检测是否登录，弹出登录对话框（可选）
 * 用于需要登录的操作（如图书详情、书单详情等可分享页面中）
 * @param showModal {Boolean}
 * @return {Boolean}
 */
export function isLogin(showModal = false) {
  if (getUID()) {
    return true;
  } else {
    if (showModal) {
      uni.showModal({
        title: "您还未登录",
        content: "登录后才可使用完整功能，是否前去登录？",
        success: (res) => {
          if (res.confirm) {
            uni.navigateTo({
              url: "/pages/register/register",
              //   url: "/pages/register/register?need_return=true",
            });
          }
        },
      });
    }
    return false;
  }
}
